Skip to content

feat(mbpt): square-root-normalized δr, δl projector operators#555

Draft
ajay-mk wants to merge 9 commits into
masterfrom
ajay/feat/dl-dr-ops
Draft

feat(mbpt): square-root-normalized δr, δl projector operators#555
ajay-mk wants to merge 9 commits into
masterfrom
ajay/feat/dl-dr-ops

Conversation

@ajay-mk

@ajay-mk ajay-mk commented Jun 16, 2026

Copy link
Copy Markdown
Member

Adds δr and δl square-root-normalized excitation/deexcitation projector and the Normalization machinery they need. Uses Power (#513) to represent the square roots.

Motivation: In UCC-EOM the eigenproblem must be Hermitian, which requires the normalization to be split symmetrically between the bra (projector) and ket (operator) sides. To get the standard 1/(c!a!) normalization, it's square root is applied on each side (in both projector and operator). The total stays 1/(c!a!) = 1/(k!)² for a particle-conserving rank-k block; = 1/k! per side.

Normalization conventions

Default     →  1/(c! a!)          (standard operator builders)
Implicit    →  no prefactor       (A, S, definition carries normalization)
SquareRoot  →  √(1/(c! a!))       (δr, δl)

Changelist

  • Normalization enum is moved to mbpt scope and a new member SquareRoot is added.
  • OpMaker supports SquareRoot normalization
  • get_unique_indices now handles Power correctly
  • Adds an optional normalization argument to r, l, R, L (defaulting to Default) and P, A, S (defaulting to their intrinsic Implicit)
  • Defines δr/δl as SquareRoot-normalized P: no need to make new definitions, they have the same structure.
  • eom_r/eom_l now build R/L with SquareRoot normalization and project with δl/δr instead of bare P
  • No behavior change for existing r/l/R/L/P/A/S callers, the new Normalization argument defaults preserves existing behavior.

@ajay-mk ajay-mk added the feature New feature label Jun 16, 2026
Comment thread SeQuant/core/utility/indices.hpp
Comment thread SeQuant/domain/mbpt/op.hpp Outdated
Default, /// Include 1/(c! a!) prefactor
Implicit, /// No prefactor, used for  and Ŝ since their definition
/// includes the normalization
SquareRoot /// Include sqrt(1/c! a!) prefactor

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the literature I have often read the term Symmetric for this case. Not sure if this should be preferred here though as I guess Normalization itself doesn't imply the presence of a LHS and RHS state/component. 🤔

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature New feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants